﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;
using System.Data.SqlClient;

namespace CapaDatos.Adapters
{
  public  class EvaluarAlumnoAdapter
    {

        BDRinconLuzEntities contexto;

        public EvaluarAlumnoAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

        public EvaluarAlumnoAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }


         public void Agregar(EvaluacionAlumno entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
                contexto.RealizarCambios();
            }
        }

         public void Eliminar(EvaluacionAlumno entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<EvaluacionAlumno> objectSet = contexto.CrearSet<EvaluacionAlumno>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



         public void Modificar(EvaluacionAlumno entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.RegistrarCambios(entidad);
            contexto.SaveChanges();
        }


        public IEnumerable<EvaluacionAlumno> Obtener()
        {
            return contexto.CrearSet<EvaluacionAlumno>();
        }

       


        public List<ViewEntity> ObtenerAlumnosCicloActual()
        {

            List<ViewEntity> Entidades = null;

            var Alumnos = (from v in contexto.InscripcionCicloLectivo
                                where v.Turno.CicloLectivo.FechaDesde.Value.Year == DateTime.Now.Year &&
                                v.Eliminada != true
                                select v.Alumno.LegajoAlumno).Except(from z in contexto.EvaluacionAlumno
                                                                        where z.InscripcionCicloLectivo.Turno.CicloLectivo.FechaDesde.Value.Year == DateTime.Now.Year &&
                                                                        z.Eliminada != true
                                                                        select z.InscripcionCicloLectivo.Alumno.LegajoAlumno);

            if (Alumnos.Count() > 0)
            {
                var Lista = (from v in contexto.Alumno
                             where Alumnos.Contains(v.LegajoAlumno)
                             select v).ToList();

                Entidades = new List<ViewEntity>();


                foreach (var item in Lista)
                {
                    Entidades.Add(new ViewEntity(item.LegajoAlumno, item.ApellidoAlumno + ", " + item.NombreAlumno + " / DNI: " + item.DniAlumno));

                }
                
            }

            return Entidades;

        }

        public bool ExisteEntidad(EvaluacionAlumno entidad)
        {
            var query = (from v in contexto.EvaluacionAlumno
                         where v.InscripcionCicloLectivo.IdInscripcionCicloLectivo == entidad.InscripcionCicloLectivo.IdInscripcionCicloLectivo &&
                                v.Evaluacion.IdEvaluacion == entidad.Evaluacion.IdEvaluacion &&
                                 v.Eliminada != true
                                 select v).Any();

            return query;

        }

        public List<ViewEntity> ObtenerEvaluacionesPorAño(int año)
        {
            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var Existe = (from v in contexto.EvaluacionAlumno
                         where v.FechaEvaluacion.Year == año &&
                              v.Eliminada != true
                         select v).Any();


            if (Existe)
            {
                var Lista = (from v in contexto.EvaluacionAlumno.Include("InscripcionCicloLectivo").Include("InscripcionCicloLectivo.Alumno")
                             where v.FechaEvaluacion.Year == año &&
                                  v.Eliminada != true
                             select v).ToList();

                if (Lista.Count > 0)
                {

                    foreach (var item in Lista)
                    {
                        ListaFinal.Add(new ViewEntity(item.InscripcionCicloLectivo.Alumno.LegajoAlumno, item.InscripcionCicloLectivo.Alumno.ApellidoAlumno + ", " + item.InscripcionCicloLectivo.Alumno.NombreAlumno + " / DNI: " + item.InscripcionCicloLectivo.Alumno.DniAlumno));
                    }



                }
            }

            return ListaFinal;
        }


        public EvaluacionAlumno ObtenerEntidad(Guid legajoAlumno, int año)
        {

            var Entidad = (from v in contexto.EvaluacionAlumno.Include("InscripcionCicloLectivo").Include("InscripcionCicloLectivo.Alumno").Include("Evaluacion").Include("InscripcionCicloLectivo.Turno").Include("InscripcionCicloLectivo.Turno.CicloLectivo")
                           where v.FechaEvaluacion.Year == año &&
                           v.InscripcionCicloLectivo.Alumno.LegajoAlumno == legajoAlumno &&
                                v.Eliminada != true
                           select v).First();

            return Entidad;

        }


        public EvaluacionAlumno ObtenerEvaluacionPorInscripcion(Guid idInscripcionCicloLectivo)
        {

            var Entidad = (from v in contexto.EvaluacionAlumno.Include("InscripcionCicloLectivo").Include("InscripcionCicloLectivo.Alumno").Include("Evaluacion").Include("InscripcionCicloLectivo.Turno").Include("InscripcionCicloLectivo.Turno.CicloLectivo")
                           where v.InscripcionCicloLectivo.IdInscripcionCicloLectivo == idInscripcionCicloLectivo &&
                                v.Eliminada != true
                           select v).First();

            return Entidad;

        }



        public List<ViewEntity> ObtenerAlumnosCicloConEvaluacion(Guid idCicloLectivo)
        {

            List<ViewEntity> Entidades = new List<ViewEntity>();

            var Alumnos = (from z in contexto.EvaluacionAlumno
                                where z.InscripcionCicloLectivo.Turno.CicloLectivo.IdCicloLectivo == idCicloLectivo &&
                                z.InscripcionCicloLectivo.Eliminada != true &&
                                z.Eliminada != true
                                select z.InscripcionCicloLectivo.Alumno);

            if (Alumnos.Count() > 0)
            {

                foreach (var item in Alumnos)
                {
                    Entidades.Add(new ViewEntity(item.LegajoAlumno, item.ApellidoAlumno + ", " + item.NombreAlumno + " / DNI: " + item.DniAlumno));

                }

            }

            return Entidades;

        }




    }
}
